package br.ufpe.cin.rgms.linha.modelo;

import java.util.List;

import javax.persistence.Basic;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;

import org.hibernate.annotations.CollectionOfElements;

import br.ufpe.cin.rgms.base.AbstractBusinessEntity;
import br.ufpe.cin.rgms.membro.modelo.Membro;
import br.ufpe.cin.rgms.publicacao.modelo.Publicacao;

@Entity
@Table(uniqueConstraints = { @UniqueConstraint(columnNames = { "nome" }) })
public class Linha extends AbstractBusinessEntity implements Comparable<Publicacao> {

	/**
	 * 
	 */
	private static final long serialVersionUID = -6916097893123734957L;

	protected String nome;

	protected String sumario;

	protected String descricao;

	protected List<String> financiadores;

	protected List<Membro> membros;

	protected List<Publicacao> publicacoes;

	public Linha(String nome, String sumario, String descricao, List<String> financiadores, List<Membro> membros, List<Publicacao> publicacoes) {
		super();
		this.nome = nome;
		this.sumario = sumario;
		this.descricao = descricao;
		this.financiadores = financiadores;
		this.membros = membros;
		this.publicacoes = publicacoes;
	}

	public Linha() {
	}

	@ManyToMany
	@JoinTable(name = "Linha_Membro", joinColumns = @JoinColumn(name = "linha_id"), inverseJoinColumns = @JoinColumn(name = "membro_id"))
	public List<Membro> getMembros() {
		return this.membros;
	}

	public void setMembros(List<Membro> membros) {
		this.membros = membros;
	}

	@Basic
	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	@Basic
	public String getSumario() {
		return sumario;
	}

	public void setSumario(String sumario) {
		this.sumario = sumario;
	}

	@Basic
	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	@CollectionOfElements
	public List<String> getFinanciadores() {
		return financiadores;
	}

	public void setFinanciadores(List<String> financiadores) {
		this.financiadores = financiadores;
	}

	@ManyToMany
	@JoinTable(name = "Linha_Publicacao", joinColumns = @JoinColumn(name = "linha_id"), inverseJoinColumns = @JoinColumn(name = "publicacao_id"))
	public List<Publicacao> getPublicacoes() {
		return publicacoes;
	}

	public void setPublicacoes(List<Publicacao> publicacoes) {
		this.publicacoes = publicacoes;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	@Override
	public int compareTo(Publicacao arg0) {
		return 0;
	}

}
